﻿//#include <iostream>
//#include <vector>
//
//using namespace std;

//class Person
//{
//public:
//	Person(const char* name)
//		:_name(name)
//	{}
//	string _name; // 姓名
//};
//class Student : virtual public Person
//{
//public:
//	Student(const char* name, int num)
//		:Person(name)
//		, _num(num)
//	{}
//protected:
//	int _num; //学号
//};
//class Teacher : virtual public Person
//{
//public:
//	Teacher(const char* name, int id)
//		:Person(name)
//		, _id(id)
//	{}
//protected:
//	int _id; // 职工编号
//};
//// 不要去玩菱形继承
//class Assistant : public Student, public Teacher
//{
//public:
//	Assistant(const char* name1, const char* name2, const char* name3)
//		:Person(name3)
//		, Student(name1, 1)
//		, Teacher(name2, 2)
//	{}
//protected:
//	string _majorCourse; // 主修课程
//};
//int main()
//{
//	// 因为Assistant的类中只会存在一个_name成员，所以输出时会是最后一次被修改的结果"王五"
//	Assistant a("张三", "李四", "王五");
//	cout << a._name << endl;
//	cout << "**************" << endl;
//	//即使指定类域访问也是Assistant对象中唯一的_name
//	cout << a.Person::_name << endl;
//	cout << a.Student::_name << endl;
//	cout << a.Teacher::_name << endl;
//	//地址相同
//	cout << &a.Person::_name << endl;
//	cout << &a.Student::_name << endl;
//	cout << &a.Teacher::_name << endl;
//
//	return 0;
//}


// Tire(轮胎)和Car(⻋)更符合has-a的关系
//class Tire 
//{
//protected:
//	string _brand = "Michelin"; // 品牌
//	size_t _size = 17; // 尺寸
//};
//
//class Car 
//{
//protected:
//	string _colour = "⽩⾊"; // 颜色
//	string _num = "渝ABCT00"; // ⻋牌号
//	Tire _t1; // 轮胎1
//	Tire _t2; // 轮胎2
//	Tire _t3; // 轮胎3
//	Tire _t4; // 轮胎4
//};
//
//
//// Car和BMW/Benz更符合is-a的关系
//class BMW : public Car 
//{
//public:
//	void Drive() { cout << "好开-操控" << endl; }
//};
//
//class Benz : public Car 
//{
//public:
//	void Drive() { cout << "好坐-舒适" << endl; }
//};


//继承类模版
//namespace WX
//{
//	template <class T>
//	class stack : public std::vector<T>
//	{
//		void push(const T& x)
//		{
//			vector<T>::push_back(x)
//		}
//		
//		void pop()
//		{
//			vector<T>::pop_back();
//		}
//
//		const T& top()
//		{
//			return vector<T>::back();
//		}
//
//		bool empty()
//		{
//			return vector<T>::size();
//		}
//	};
//}

//namespace WX
//{
//	template <class T>
//	class stack 
//	{
//		std::vector<T> v1;
//
//		void push(const T& x)
//		{
//			v1.push_back();
//		}
//
//		void pop()
//		{
//			v1.push_back();
//		}
//
//		const T& top()
//		{
//			v1.back();
//		}
//
//		bool empty()
//		{
//			v1.empty();
//		}
//	};
//}